/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ec.medical.entidades;

import com.ec.medical.enumeracion.EstadoCitaEnum;
import java.io.Serializable;
import java.sql.Time;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author Administrador
 */
@Entity
@Table(name = "cita")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Cita.findAll", query = "SELECT c FROM Cita c"),
    @NamedQuery(name = "Cita.findByCodigoCita", query = "SELECT c FROM Cita c WHERE c.codigoCita = :codigoCita"),
    @NamedQuery(name = "Cita.findByEstado", query = "SELECT c FROM Cita c WHERE c.estado = :estado"),
    @NamedQuery(name = "Cita.findByFechaCita", query = "SELECT c FROM Cita c WHERE c.fechaCita = :fechaCita"),
    @NamedQuery(name = "Cita.findByPrestadorYFechaMinima", query = "SELECT c FROM Cita c WHERE c.prestador.codigoPrestador = :codigoPrestador AND c.fechaCita >= :fechaCita AND c.estado = :estado"),
    @NamedQuery(name = "Cita.findByPrestadorEstadosYFechaMinima", query = "SELECT c FROM Cita c WHERE c.prestador.codigoPrestador = :codigoPrestador AND c.fechaCita >= :fechaCita AND c.estado IN (:estado)"),
    @NamedQuery(name = "Cita.findByEstadoYFechaMaxima", query = "SELECT c FROM Cita c WHERE c.fechaCita <= :fechaActual AND c.estado = :estado"),
    @NamedQuery(name = "Cita.findByPrestadorEstadoYFecha", query = "SELECT c FROM Cita c WHERE c.fechaCita = :fechaActual AND c.estado = :estado AND c.prestador.codigoPrestador = :codigoPrestador")})
public class Cita implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "codigo_cita")
    private Integer codigoCita;
    @Basic(optional = false)
    @Enumerated(EnumType.STRING)
    @NotNull
    @Column(name = "estado")
    private EstadoCitaEnum estado;
    @Basic(optional = false)
    @NotNull
    @Column(name = "fecha_cita")
    @Temporal(TemporalType.DATE)
    private Date fechaCita;
    @Basic(optional = false)
    @NotNull
    @Column(name = "hora_inicio_cita")
    private Time horaInicio;
    @Basic(optional = false)
    @NotNull
    @Column(name = "hora_fin_cita")
    private Time horaFin;
    @JoinColumn(name = "codigo_prestador", referencedColumnName = "codigo_prestador")
    @ManyToOne(optional = false)
    private Prestador prestador;
    @JoinColumn(name = "codigo_ficha_medica", referencedColumnName = "codigo_ficha_medica")
    @ManyToOne
    private FichaMedica fichaMedica;
    @JoinColumn(name = "codigo_tipo_cita", referencedColumnName = "codigo_tipo_cita")
    @ManyToOne
    private TipoCita tipoCita;
    @JoinColumn(name = "codigo_cliente", referencedColumnName = "codigo_cliente")
    @ManyToOne(optional = false)
    private Cliente cliente;
    @Transient
    private boolean puedeCancelarCita;

    public Cita() {
    }

    public Cita(Integer codigoCita) {
        this.codigoCita = codigoCita;
    }

    public Cita(Integer codigoCita, EstadoCitaEnum estado, Date fechaCita) {
        this.codigoCita = codigoCita;
        this.estado = estado;
        this.fechaCita = fechaCita;

    }

    public Integer getCodigoCita() {
        return codigoCita;
    }

    public void setCodigoCita(Integer codigoCita) {
        this.codigoCita = codigoCita;
    }

    public EstadoCitaEnum getEstado() {
        return estado;
    }

    public void setEstado(EstadoCitaEnum estado) {
        this.estado = estado;
    }

    public Date getFechaCita() {
        return fechaCita;
    }

    public void setFechaCita(Date fechaCita) {
        this.fechaCita = fechaCita;
    }

    public Prestador getPrestador() {
        return prestador;
    }

    public void setPrestador(Prestador prestador) {
        this.prestador = prestador;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (codigoCita != null ? codigoCita.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Cita)) {
            return false;
        }
        Cita other = (Cita) object;
        if ((this.codigoCita == null && other.codigoCita != null) || (this.codigoCita != null && !this.codigoCita.equals(other.codigoCita))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.ec.catdogcare.entidades.Cita[ codigoCita=" + codigoCita + " ]";
    }

    public FichaMedica getFichaMedica() {
        return fichaMedica;
    }

    public void setFichaMedica(FichaMedica fichaMedica) {
        this.fichaMedica = fichaMedica;
    }

    public TipoCita getTipoCita() {
        return tipoCita;
    }

    public void setTipoCita(TipoCita tipoCita) {
        this.tipoCita = tipoCita;
    }

    public Time getHoraInicio() {
        return horaInicio;
    }

    public void setHoraInicio(Time horaInicio) {
        this.horaInicio = horaInicio;
    }

    public Time getHoraFin() {
        return horaFin;
    }

    public void setHoraFin(Time horaFin) {
        this.horaFin = horaFin;
    }

    public boolean isPuedeCancelarCita() {
        return puedeCancelarCita;
    }

    public void setPuedeCancelarCita(boolean puedeCancelarCita) {
        this.puedeCancelarCita = puedeCancelarCita;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }
}
